<script setup lang="ts">
import { getConsultOrderPayUrl } from '@/services/consult'
import { showLoadingToast, showToast } from 'vant'
import { ref } from 'vue'
// 跳转支付
// 买家账号：scobys4865@sandbox.com
// 登录密码：111111
// 支付密码：111111

const props = defineProps<{
  // 控制显示隐藏（该组件需要支持v-model:show）
  show: boolean
  // 订单id
  orderId: string
  // 实付金额
  actualPayment: number
  // 关闭前调用的函数
  onClose?: () => void
  // 设置回跳地址
  payCallback: string
}>()

const emit = defineEmits<{
  (e: 'update:show', val: boolean): void
}>()

const paymentMethod = ref<0 | 1>()

// 跳转支付
const pay = async () => {
  if (paymentMethod.value === undefined) return showToast('请选择支付方式')
  showLoadingToast({ message: '跳转支付', duration: 0 })
  const res = await getConsultOrderPayUrl({
    orderId: props.orderId,
    paymentMethod: paymentMethod.value,
    payCallback: import.meta.env.VITE_APP_CALLBACK + props.payCallback
  })
  window.location.href = res.data.payUrl
}
</script>

<template>
  <div>
    <!-- 支付抽屉，动作面板 -->
    <!-- closeable	是否显示关闭图标 -->
    <!-- close-on-popstate	是否在页面回退时自动关闭 -->
    <!-- before-close	关闭前的回调函数，返回 false 可阻止关闭，支持返回 Promise -->

    <!-- v-model:show = :show @update:show -->
    <!-- 如果(van-action-sheet)这里使用v-model:show="show" 会报错 Unexpected mutation of "show" prop-->
    <!-- 原因是违反单项数据流 -->
    <!-- 这里把v-model:show拆分成它的原始模样 :show 和 @update:show -->
    <!-- 通过:show把值传递给子组件(van-action-sheet) -->
    <!-- 通过@update:show事件监听来拿到子组件(van-action-sheet)关闭时传递过来的值$event -->
    <!-- 再通过emit('update:show', $event)抛出事件给父组件，并传递值$event -->
    <!-- 配合着defineProps中的show-->
    <!-- 这样的话在父组件中即可使用v-model:show="show" -->
    <van-action-sheet
      :show="show"
      @update:show="emit('update:show', $event)"
      title="选择支付方式"
      :closeable="false"
      :close-on-popstate="false"
      :before-close="onClose"
    >
      <div class="pay-type">
        <p class="amount">￥{{ actualPayment.toFixed(2) }}</p>
        <van-cell-group>
          <van-cell title="微信支付" @click="paymentMethod = 0">
            <template #icon><cp-icon name="consult-wechat" /></template>
            <template #extra>
              <van-checkbox :checked="paymentMethod === 0" />
            </template>
          </van-cell>
          <van-cell title="支付宝支付" @click="paymentMethod = 1">
            <template #icon><cp-icon name="consult-alipay" /></template>
            <template #extra>
              <van-checkbox :checked="paymentMethod === 1" />
            </template>
          </van-cell>
        </van-cell-group>
        <div class="btn">
          <van-button type="primary" round block @click="pay">
            立即支付
          </van-button>
        </div>
      </div>
    </van-action-sheet>
  </div>
</template>

<style lang="scss" scoped>
.pay-type {
  .amount {
    padding: 20px;
    text-align: center;
    font-size: 16px;
    font-weight: bold;
  }

  .btn {
    padding: 15px;
  }

  .van-cell {
    align-items: center;

    .cp-icon {
      margin-right: 10px;
      font-size: 18px;
    }

    .van-checkbox :deep(.van-checkbox__icon) {
      font-size: 16px;
    }
  }
}
</style>
